package vista;

import java.util.Hashtable;
import titiritero.vista.ImagenRectangular;
import modelo.Nivel.*;
import modelo.controlAereo.*;
import vista.Aeronave.*;
import vista.Nivel.*;

public class IndustriaDeVistas {

    Hashtable<Class, Class> tablaDeVistas;

    public IndustriaDeVistas(){
	tablaDeVistas = new Hashtable();
        agregarVista(AvionSimple.class, VistaAvionSimple.class);
        agregarVista(AvionComputarizado.class, VistaAvionSimple.class);
        agregarVista(AvionPesado.class, VistaAvionPesado.class);
        agregarVista(Helicoptero.class, VistaHelicoptero.class);
        agregarVista(Nivel1.class, VistaNivel1.class);
        agregarVista(Nivel2.class, VistaNivel2.class);
        agregarVista(Nivel3.class, VistaNivel3.class);
    }

    public void agregarVista(Class clave, Class vista){
    /*PreCondicion: la industria debe estar creada
      PostCondicion: se agrego una nueva vista a la industria*/
        tablaDeVistas.put(clave, vista);
    }
    
    public ImagenAeronave crearUnaVista(Aeronave unaAeronave){
    /*PreCondicion: la industria debe estar creada
      PostCondicion: devuelve la imagen que le corresponde a cada tipo de Aeronave,
      en caso que no guarde la clase de aeronave que se pasa por parametro entonces devuelve null*/
        Class vista = tablaDeVistas.get(unaAeronave.getClass());
        ImagenAeronave imagen = null;
        try {imagen = (ImagenAeronave) vista.newInstance();
        imagen.model(unaAeronave);}
        catch(InstantiationException e1){}
        catch(IllegalAccessException e2){}
        return imagen;
    }
    
    public ImagenNivel crearUnaVista(Nivel unNivel){
    /*PreCondicion: la industria debe estar creada
      PostCondicion: devuelve la imagen que le corresponde a cada tipo de Nivel,
      en caso que no guarde la clase de nivel que se pasa por parametro entonces devuelve null*/
        Class vista = tablaDeVistas.get(unNivel.getClass());
        ImagenNivel imagen = null;
        try {imagen = (ImagenNivel) vista.newInstance();
        imagen.model(unNivel);}
        catch(InstantiationException e1){}
        catch(IllegalAccessException e2){}
        return imagen;
    }

 }
	
	

